/*
 * @Description: 用户路由处理函数
 * @Autor: xiaohuihui
 * @Date: 2022-11-28 18:05:08
 * @LastEditors: xiaohuihui
 * @LastEditTime: 2022-12-23 11:01:23
 */
const db = require("../db/index");
const bcrypt = require("bcryptjs");
const jwt = require('jsonwebtoken')
const config = require('../config')
const handler = {
    // 用户登录
    login(req, res) {
        // 接收表单数据
        const userInfo = req.body;
        const sql = "select * from users where account=?";
        db.query(sql, userInfo.account, (err, result) => {
            if (err) return res.cc(err);
            if (result.length !== 1) return res.cc("账号或密码错误,登录失败!");
            // 判断密码是否正确
            const isLogin = bcrypt.compareSync(
                userInfo.password,
                result[0].password
            );
            if (!isLogin) return res.cc("账号或密码错误,登录失败!");
            // 将关键信息移除
            const user = {...result[0],password: '',user_pic:''}
            // 通过jwt生成token
            const tokenStr = jwt.sign(user,config.jwtSecretKey,{expiresIn: '2h'})
            res.cc("登录成功", 200, {token: tokenStr});
        });
    },
    // 用户注册
    register(req, res) {
        // 接收表单数据
        const userinfo = req.body;
        // 判断数据是否合法
        if (!userinfo.account || !userinfo.password)
            return res.cc("用户名或密码不能为空！");
        // 查找用户名是否重复sql
        const sql = "SELECT COUNT(*) as count FROM USERS WHERE account=?";
        db.query(sql, userinfo.account, (err, results) => {
            // sql语句执行失败
            if (err) return res.cc(err);
            // 查找条数大于0 已有用户
            if (results[0].count) return res.cc("账户被占用，请更换其他账户！");
            // 加密密码
            userinfo.password = bcrypt.hashSync(userinfo.password);
            // 插入的数据
            const user = {
                user_name: userinfo.user_name,
                account: userinfo.account,
                password: userinfo.password,
            };
            // 插入sql
            const sql = "insert into users set ?";
            db.query(sql, user, (err, results) => {
                // sql语句执行失败
                if (err) return res.cc(err);
                // 插入失败，影响的条数不为1
                if (results.affectedRows !== 1)
                    return res.cc("注册用户失败，请稍后再试！");
                // 插入成功
                res.cc("注册成功！", 200);
            });
        });
    },
};

module.exports = handler;
